Análisis técnico, legal y de arquitectura para construir un agente IA que consulte plataformas estilo Airbnb. Basado en investigación de fuentes reales (2025–2026).
Antes de codear, hay que fijar para quién es el robot. Esto redefine todo el diseño:
| Perfil | Enfoca en | Ejemplo de consulta |
|---|---|---|
| 🧳 Huésped | Búsqueda conversacional + recomendación | "Apartamento 2 hab cerca del Parque Güell, bajo €100/noche" |
| 💰 Inversor STR | Volúmenes + datos históricos + métricas | "ADR y ocupación promedio en barrios de Miami" |
| 📊 Monitor de precios | Scraping recurrente + alertas | "Avísame si baja el precio de este depto" |
| 🏨 Host | Análisis competitivo de su zona | "¿Cómo cobran mis competidores en Barcelona?" |
Lo que menos te enseñan pero lo más importante. El panorama varía por jurisdicción:
| Aspecto | Situación |
|---|---|
| ¿Legal extraer datos públicos? | Defendible en EE.UU. (hiQ v. LinkedIn, Meta v. Bright Data) |
| Términos de Airbnb | Prohíben explícitamente bots, crawlers y scrapers automatizados |
| robots.txt de Airbnb | Bloquea /s/* (búsquedas), /rooms/* y /calendar/* |
| GDPR / CCPA | Nombres de hosts, reviews y fotos son datos personales |
| Europa (Ryanair v. PR) | Los ToS tienen más peso contractual que en EE.UU. |
robots.txt · espaciá las peticiones (~100/h por IP) · preferí ratings agregados sobre textos/review individual · no revender datos ni replicar contenido protegido.
Airbnb pide a los bots que no accedan a estas secciones (y su propia API prohíbe explícitamente "disallowed crawling"):
| Patrón bloqueado | Qué es |
|---|---|
/s/*/* | Resultados de búsqueda (el grueso de lo que se quiere) |
/rooms/*/amenities | Páginas de detalle de anuncio |
/rooms/*/photos | Fotos de anuncio |
/rooms/*/reviews | Reseñas |
/calendar/ | Calendarios de disponibilidad (excepto iCal oficial) |
/users/*/profile | Perfiles de usuarios |
La ruta moderna es un agente IA con MCP (Model Context Protocol). Así quedó el diseño que ya está funcionando en 2025–2026:
Tres componentes clave:
| Componente | Función |
|---|---|
| NLU (Natural Language Understanding) | Convierte "quiero algo cozy cerca del Güell" en parámetros: ubicación, ~2 hab, presupuesto, amenidades |
| MCP Tools | Conexión real con la data de Airbnb (búsqueda, detalle, comparar precios) |
| Memoria conversacional | Recuerda preferencias entre búsquedas y personaliza resultados |
ConversationService (extrae parámetros con LLM) → SearchService (consulta Elasticsearch/Api) → Ranking por relevancia + geo-radius → Resultados como tarjetas swipeables.
| Opción | Cómo funciona | Esfuerzo | Mejor para |
|---|---|---|---|
| A. MCP Server listo RECOMENDADO | Usás un servidor MCP que ya habla con Airbnb. Ej: makework36/airbnb-mcp-server (Apify). Sin login ni API key. |
Bajo | Arrancar en días, prototipos |
| B. Apify Actor | Actores preconstruidos que manejan anti-bot por vos. Devuelve JSON/CSV/Excel. | Bajo | Automatización recurrente sin código |
| C. API scraping + proxies | Bright Data (~98% éxito), Scrapfly (~99%), Oxylabs. Vos parseás el HTML renderizado. | Medio | Volúmenes, datos geo-específicos |
| D. DIY Playwright | Navegador headless + interceptar API GraphQL interna StaysSearch. Máximo control. |
Alto | Control total, one-off, learning |
Airbnb está clasificado como dificultad 4/5 para scraping. Planificá para:
| Desafío | Detalle | Contramedida |
|---|---|---|
| Anti-bot agresivo | WAF propio + Akamai, fingerprinting TLS, detección de navegador | Proxies residenciales (no datacenter) |
| Precios dependientes de fecha | El precio no existe sin checkin + checkout | Cada combinación de fechas = una consulta |
| Selectores inestables | Las clases CSS cambian en cada despliegue | Usar [data-testid] o API GraphQL |
| Límite 270 resultados | Airbnb solo muestra ~270 listings por búsqueda | Dividir ciudad en barrios/códigos postales |
| Rate limits | ~100 peticiones/hora por IP | Delay 3–10s, backoff exponencial |
| Campo | ¿Extraíble? | Notas |
|---|---|---|
| Título, tipo de propiedad | ✅ | Básico y estable |
| Precio nocturno + fees | ✅ | Capturar desglose completo |
| Rating y nº de reviews | ✅ | Agregados, preferible a texto individual |
| Amenidades, reglas, políticas | ✅ | En página de detalle |
| Calendario de disponibilidad | ⚠️ | Difícil, requiere subpáginas |
| Coordenadas | ⚠️ | Son aproximadas (Airbnb las ofusca) |
| Nombre de host | ✅* | Dato personal — con cuidado |
| Dirección exacta / email | ❌ | No extraíble ni deberías |
__dirname = "~/.claude/mcp.json" (macOS) o %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"airbnb": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-streamable-http",
"https://airbnb-mcp-server.apify.actor/mcp?token=TU_APIFY_TOKEN"
]
}
}
}
pip install playwright playwright-stealth
playwright install chromium
import asyncio
from playwright.async_api import async_playwright
async def scrape_airbnb(url):
async with async_playwright() as p:
browser = await p.chromium.launch(
headless=True,
args=["--disable-blink-features=AutomationControlled"]
)
context = await browser.new_context(proxy="http://tu_proxy_residencial:puerto")
page = await context.new_page()
await page.goto(url, wait_until="networkidle")
# Preferí interceptar la API GraphQL interna (StaysSearch) sobre el DOM
listings = await page.query_selector_all("[data-testid='card-container']")
await browser.close()
return listings
pip install apify-client para la Opción B, o Pandas/SQLite para almacenamiento local.¿Huésped / inversor / monitor? Marco legal básico.
MCP Server o Apify → tener datos reales de Airbnb.
LLM extrae ubicación, fechas, huéspedes, presupuesto.
Recuerda preferencias entre búsquedas.
Web/swipe, o entrega por email/Notion.
Rate limiting, caching, detección de roturas.
| Si querés... | Haz esto |
|---|---|
| Validar la idea rápido | Usá el MCP Server de Apify (makework36/airbnb-mcp-server). Sin código, sin login, ~$0.02/llamada. |
| Automatizar sin programar | Apify Actor + exportación CSV/Excel. |
| Tener volúmenes o datos geo | Bright Data / Scrapfly + proxies residenciales. |
| Máximo control / learning | Playwright + interceptar API GraphQL. |
| Datos históricos y confiables | Datos públicos (Inside Airbnb) o proveedores licenciados (AirDNA). |
robots.txt, las políticas de la plataforma y la privacidad de las personas (GDPR/CCPA).